package com.edfu.core.coursemgt.service.api;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import com.edfu.core.coursemgt.vo.CourseOffering;
import com.edfu.core.coursemgt.vo.Lesson;
import com.edfu.core.coursemgt.vo.LessonUnit;
import com.edfu.core.util.Response;

public interface ICourseOfferingMgtService {
	public CourseOffering addCourseOffering(CourseOffering courseOffering);
	public CourseOffering updateCourseOffering(CourseOffering courseOffering);
	public Response deleteCourseOffering(String courseOfferingCode);
	public List<CourseOffering> getCourseOfferings();
	public CourseOffering getCourseOffering(String courseOfferingCode);
	public List<CourseOffering> getCourseOfferingsByAuthor(String authorId);
	public void enrollToCourseOffering(String courseOfferingCode, String userId);
	public List<CourseOffering> getEnrolledCourseOfferings(String userId);
	public List<CourseOffering> getAuthoredCourseOfferings();
	public List<CourseOffering> addAuthors(String courseOfferingCode, List<String> authorIds);
	public Lesson addLesson(Lesson lesson, String courseOfferingCode);
	public Response updateLesson(Lesson lesson, String courseOfferingCode);
	public Response deleteLesson(String courseOfferingCode, String lessonName);
	public List<Lesson> getLessons(String courseOfferingCode);
	public Lesson getLesson(String courseOfferingCode, String lessonName);
	public LessonUnit addLessonUnit(LessonUnit lessonUnit, String courseOfferingCode, String lessonName);
	public Response updateLessonUnit(LessonUnit lessonUnit, String courseOfferingCode, String lessonName);
	public Response deleteLessonUnit(String courseOfferingCode, String lessonName, String lessonUnitName);
	public LessonUnit getLessonUnit(String courseOfferingCode, String lessonName, String lessonUnitName);
	public List<LessonUnit> getLessonUnits(String courseOfferingCode, String lessonName);
	public void addContent(InputStream contentAsStream, String contentCtxType, String contentContextId, String contentType,String contentId, Map<String, String> properties, Map<String, String> parentContextMap);
	

}
